import axios from "axios";
import router from "../router";
import elementUI from "element-ui"
import nprogress from "nprogress"

// console.log(axios.CancelToken)

let CancelToken = axios.CancelToken; //获取CancelToken方法

let http = axios.create({ //会把传入的对象当成axios的prototype
    baseURL: "/api", //配置默认的地址
    withCredentials: true, //将会默认携带认证给后端
    timeout: 1000 * 10, //请求超时设置,如果超过了10秒,那么就会进入reject
})

//请求拦截器
http.interceptors.request.use(function (config) {
    nprogress.start()
    //由于请求数据的时候需要携带token
    //但是 登入 获取验证码 校验验证码不需要token
    let rowPaths = ["/users/getCaptcha", "/users/login", "/users/verifyCaptcha"];
    // config.url 可以获取当前被拦截的请求的请求地址
    // console.log(config)
    if (rowPaths.includes(config.url)) {
        return config //放行
    } else {
        //从本地存储把token取出来,携带给其它请求
        let token = localStorage.getItem("qf-token") || "";
        // console.log(token)
        config.headers['authorization'] = token;
        return config; //放行
    }

}) //请求拦截器,可以拦截所有的请求,然后添加我们需要的逻辑层

// console.log(elementUI)

//响应拦截器
http.interceptors.response.use(function (config) {
    console.log(config)
    nprogress.done()
    //进行响应拦截
    //当响应回来的状态码 是10022 或者 1004的时候 需要跳转到登入页,清除token
    // console.log(config)
    if (config.data.code === "10022" || config.data.code === "1004") {
        //router打哪儿来?
        router.push("/login");
        localStorage.removeItem("qf-token");
        //刷新页面
        location.reload();
        //提示用户登入过期
        elementUI.Message.error("登入过期,请重新登入")
        return
    }

    if (config.data.code === "10026") {
        elementUI.Message.error("没有权限")
        return
    }

    if (!config.data.state && !config.data.img && config.config.url !== "/order/query_order_status") {
        // console.log(config)
        // console.log(123)
        elementUI.MessageBox.alert(config.data.msg, "提示", {
            type: "error"
        })

        return config
    }

    return config;
})

export {
    http as
        default, //默认导出
    CancelToken
};